#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h> 
//


//模拟实现strcat
//在目的字符串的末尾追加另外一个字符串
//从目的字符串的\0处开始追加，要占掉目的字符串\0的空间，追加到源字符串的\0处，包括\0
//char* my_strcat(char* destination,const char* resource)
//{
//	char* ret = destination;
//	assert(destination&&resource);
//	while (*destination!=0)
//	{
//		destination++;
//	}
//	while (*destination++=*resource++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr[20] = {"hello "};
//	my_strcat(arr,"world");
//	printf("%s",arr);
//	return 0;
//}

//strcat自己给自己追加的时候是存在问题的、


//int main()
//{
//	char arr1[] = { "abcdef" };
//	char arr2[] = {"abw"};
//	//对应字符相比较，若第一个字符串大于第二个字符串，则返回大于0 的数字
//	//若第一个字符串小于第二个字符串，则返回小于0 的数字
//	//相等则返回 0
//
//	int ret=strcmp(arr1,arr2);
//	printf("%d\n",ret);
//	return 0;
//}


////模拟实现strcmp
//int my_strcmp(const char* string1,const char* string2)
//{
//	//对位的字符相比较，直至不同
//	//相同有两种情况，两个都是\0和两个为普通的字符
//	assert(string1&&string2);
//	while (*string1==*string2)
//	{
//		if (*string1 == '\0')
//		{
//			return 0;
//		}
//		string1++;
//		string2++;
//	}
//	if (*string1 > *string2)
//	{
//		return 1;
//	}
//	else
//	{
//		return -1;
//	}
//}
//int main()
//{
//	char arr1[] = "abcd";
//	char arr2[] = "abcg";
//	int ret = my_strcmp(arr1, arr2);
//	printf("%d\n",ret);
//	return 0;
//}

//char* my_strncpy(char* destination,const char* resource ,size_t n)
//{
//	assert(destination&&resource);
//	char* start = destination;
//	while (n--)
//	{
//		*destination = *resource;
//		destination++;
//		resource++;
//	}
//	return start;
//
//}
//int main()
//{
//	char arr1[] = "xxxxxxxxxxxxx";
//	my_strncpy(arr1,"abcde",10);
//	printf("%s\n",arr1);
//	return 0;
//}


//int main()
//{
//	//受限的追加
//	char arr1[20] = "xxxxxxxxx";
//	//strncat(arr1,"abcd",3);
//	strncpy(arr1,"abcd",3);
//	return 0;
//}

//strncat在追加的末尾又加上了一个\0,要使得它最终还得是一个字符串
//strncpy并没有在copy完后加\0

//模拟实现strncat
//char* my_strncat(char* string1,const char* string2,size_t n)
//{
//	assert(string1&&string2);
//	char* start = string1;
//	//在目的地址的后面追加指定个数的字符后，再追加一个\0
//	while (*string1)
//	{
//		string1++;
//	}
//	while (n--)
//	{
//		*string1 = *string2;
//		string1++;
//		string2++;
//	}
//
//	*string1 = '\0';
//	return string1;
//}
//int main()
//{
//	char arr1[20] = "xxxxx";
//	my_strncat(arr1,"abcd",3);
//	printf("%s\n",arr1);
//	return 0;
//}


//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abcguip";
//	int ret=strncmp(arr1,arr2,6);
//	printf("%d\n",ret);
//	return 0;
//}


//模拟实现strncmp
int my_strncmp(const char* string1,const char* string2,size_t n)
{
	assert(string1&&string2);
	//指定次数n
	while (n--)
	{
		while (*string1 == *string2)
		{
			if (string1 == '\0')
			{
				return 0;
			}
			string1++;
			string2++;
		}
		if (*string1 > *string2)
		{
			return 1;
		}
		else
		{
			return -1;
		}
	}
	return 0;
	
}
int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = "abckghjk";
	int ret=my_strncmp(arr1,arr2,4);
	return 0;
}